Imports System.Data.SqlClient
''' <nombre>
''' Cliente
''' </nombre>
Public Class cls_cliente_

    Implements ICloneable

#Region "Variables ..."
    Private int_idcliente As Integer = 0
    Private str_codigo As String = ""
    Private int_tipo As enu_tipocliente = 0
    Private str_razonsocial As String = ""
    Private str_nombrefantasia As String = ""
    Private int_idtercero As Integer = 0
    Private int_idcobrador As Integer
    Private int_idvendedor As Integer
    Private int_idformapago As Integer
    Private int_iddenominacion As Integer = 0

    Private obj_denominacion As cls_denominacion_ = Nothing
    Private obj_tercero As cls_tercero_ = Nothing
    Private obj_cobrador As cls_cobrador_ = Nothing
    Private obj_vendedor As cls_vendedor_ = Nothing
    Private obj_formapago As cls_formapago_ = Nothing
    Private obj_clientearticulo_ As cls_clientearticulo_ = Nothing
    Private obj_clientevehiculo_ As cls_clientevehiculo_ = Nothing

    Private col_Items As Collections.Generic.List(Of cls_cliente_) = Nothing
#End Region

    Public Enum enu_tipocliente
        Empresa = 0
        Particular = 1
    End Enum

    Public Overrides Function ToString() As String
        Select Case str_formatoCombos
            Case "Nombre#########(15) - sigla(5)"
                Return razonsocial.PadRight(15) & " - " & codigo.PadRight(5)
            Case "sigla(5) - Nombre#########(15)"
                Return codigo.PadRight(5) & " - " & razonsocial.PadRight(15)
            Case "Nombre - sigla"
                Return razonsocial & " - " & codigo
            Case "sigla - Nombre"
                Return codigo & " - " & razonsocial
            Case "Nombre"
                Return razonsocial
            Case Else
                Return codigo & " - " & razonsocial
        End Select
    End Function


#Region "Propiedades ..."
    ReadOnly Property This
        Get
            Return Me
        End Get
    End Property
    ReadOnly Property ThisDescripcion As String
        Get
            Return Me.ToString
        End Get
    End Property
    ReadOnly Property pKey
        Get
            Return idcliente
        End Get
    End Property
    ReadOnly Property TerceroNombre
        Get
            If Not IsNothing(tercero) Then
                Return obj_tercero.nombres
            Else
                Return ""
            End If
        End Get
    End Property
    ReadOnly Property TerceroDomicilio
        Get
            If Not IsNothing(obj_tercero) Then
                If Not IsNothing(obj_tercero.direccionprimario) Then
                    Return obj_tercero.direccionprimario.ToString
                Else
                    Return ""
                End If
            Else
                Return ""
            End If
        End Get
    End Property
    ReadOnly Property TerceroLocalidad
        Get
            TerceroLocalidad = ""
            If Not IsNothing(obj_tercero) Then
                If Not IsNothing(obj_tercero.direccionprimario) Then
                    If Not IsNothing(obj_tercero.direccionprimario.localidad) Then
                        TerceroLocalidad = obj_tercero.direccionprimario.localidad.ToString
                    End If
                End If
            End If
        End Get
    End Property
    ReadOnly Property TerceroIva
        Get
            TerceroIva = ""
            If Not IsNothing(tercero) Then
                If Not IsNothing(tercero.condicioniva) Then
                    TerceroIva = tercero.condicioniva.ToString()
                End If
            End If
        End Get
    End Property
    ReadOnly Property TerceroSubCodigo1
        Get
            If Not IsNothing(obj_tercero) Then
                Return obj_tercero.subcodigo1
            Else
                Return ""
            End If
        End Get
    End Property
    ''' <id>
    ''' True
    ''' </id>
    Property idcliente() As Integer
        Get
            idcliente = int_idcliente
        End Get
        Set(ByVal value As Integer)
            int_idcliente = value
        End Set
    End Property
    ''' <nombre>
    ''' Codigo
    ''' </nombre>
    Property codigo() As String
        Get
            codigo = str_codigo
        End Get
        Set(ByVal value As String)
            str_codigo = value
        End Set
    End Property
    Property iddenominacion() As Integer
        Get
            iddenominacion = int_iddenominacion
        End Get
        Set(ByVal value As Integer)
            int_iddenominacion = value
        End Set
    End Property
    Property tipo() As enu_tipocliente
        Get
            tipo = int_tipo
        End Get
        Set(ByVal value As enu_tipocliente)
            int_tipo = value
        End Set
    End Property
    ''' <nombre> 
    ''' Razon Social
    ''' </nombre>
    Property razonsocial() As String
        Get
            razonsocial = str_razonsocial
        End Get
        Set(ByVal value As String)
            str_razonsocial = value
        End Set
    End Property
    ''' <nombre>
    ''' Nombre de Fantasia
    ''' </nombre>
    Property nombrefantasia() As String
        Get
            nombrefantasia = str_nombrefantasia
        End Get
        Set(ByVal value As String)
            str_nombrefantasia = value
        End Set
    End Property
    ''' <nombre> 
    ''' Identificador
    ''' </nombre>
    Property idtercero() As Integer
        Get
            idtercero = int_idtercero
        End Get
        Set(ByVal value As Integer)
            int_idtercero = value
        End Set
    End Property
    Property idcobrador As Integer
        Get
            idcobrador = int_idcobrador
        End Get
        Set(value As Integer)
            int_idcobrador = value
        End Set
    End Property
    Property idvendedor As Integer
        Get
            idvendedor = int_idvendedor
        End Get
        Set(value As Integer)
            int_idvendedor = value
        End Set
    End Property
    Property idformapago As Integer
        Get
            idformapago = int_idformapago
        End Get
        Set(value As Integer)
            int_idformapago = value
        End Set
    End Property
    Property clientearticulo_() As cls_clientearticulo_
        Get
            If IsNothing(obj_clientearticulo_) Then
                obj_clientearticulo_ = New cls_clientearticulo_
                If Not obj_clientearticulo_.CargarXidcliente(idcliente) Then
                    obj_clientearticulo_ = Nothing
                End If
            End If
            clientearticulo_ = obj_clientearticulo_
        End Get
        Set(ByVal value As cls_clientearticulo_)
            obj_clientearticulo_ = value
        End Set
    End Property
    Property clientevehiculo_() As cls_clientevehiculo_
        Get
            If IsNothing(obj_clientevehiculo_) Then
                obj_clientevehiculo_ = New cls_clientevehiculo_
                If Not obj_clientevehiculo_.CargarXidcliente(idcliente) Then
                    obj_clientevehiculo_ = Nothing
                End If
            End If
            clientevehiculo_ = obj_clientevehiculo_
        End Get
        Set(ByVal value As cls_clientevehiculo_)
            obj_clientevehiculo_ = value
        End Set
    End Property
    Property denominacion() As cls_denominacion_
        Get
            If IsNothing(obj_denominacion) Then
                obj_denominacion = New cls_denominacion_
                If Not obj_denominacion.Buscar(iddenominacion) Then
                    obj_denominacion = Nothing
                End If
            End If
            denominacion = obj_denominacion
        End Get
        Set(ByVal value As cls_denominacion_)
            obj_denominacion = value
        End Set
    End Property
    Property cobrador As cls_cobrador_
        Get
            If IsNothing(obj_cobrador) Then
                obj_cobrador = New cls_cobrador_
                If Not obj_cobrador.Buscar(idcobrador) Then
                    obj_cobrador = Nothing
                End If
            End If
            cobrador = obj_cobrador
        End Get
        Set(ByVal value As cls_cobrador_)
            obj_cobrador = value
        End Set
    End Property
    Property vendedor As cls_vendedor_
        Get
            If IsNothing(obj_vendedor) Then
                obj_vendedor = New cls_vendedor_
                If Not obj_vendedor.Buscar(idvendedor) Then
                    obj_vendedor = Nothing
                End If
            End If
            vendedor = obj_vendedor
        End Get
        Set(ByVal value As cls_vendedor_)
            obj_vendedor = value
        End Set
    End Property
    Property formapago As cls_formapago_
        Get
            If IsNothing(obj_formapago) Then
                obj_formapago = New cls_formapago_
                If Not obj_formapago.Buscar(idformapago) Then
                    obj_formapago = Nothing
                End If
            End If
            formapago = obj_formapago
        End Get
        Set(ByVal value As cls_formapago_)
            obj_formapago = value
        End Set
    End Property

    ''' <importar>
    ''' True
    ''' </importar>
    Property tercero() As cls_tercero_
        Get
            If IsNothing(obj_tercero) Then
                obj_tercero = New cls_tercero_
                If Not obj_tercero.Buscar(idtercero) Then
                    obj_tercero = Nothing
                End If
            End If
            tercero = obj_tercero
        End Get
        Set(ByVal value As cls_tercero_)
            obj_tercero = value
        End Set
    End Property

    ReadOnly Property registro() As cls_registro_
        Get
            registro = Nothing
            If Not IsNothing(tercero) Then
                If Not IsNothing(tercero.registro) Then
                    registro = obj_tercero.registro
                End If
            End If
        End Get
    End Property
    Property Items() As Collections.Generic.List(Of cls_cliente_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_cliente_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader, Optional completa As Boolean = False)
        col_Items = New Collections.Generic.List(Of cls_cliente_)
        While obj_Reader.Read()
            Dim Elemento As New cls_cliente_
            Elemento.int_idcliente = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idcliente")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("codigo"))) = False Then
                Elemento.str_codigo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("codigo")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo"))) = False Then
                Elemento.int_tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("razonsocial"))) = False Then
                Elemento.str_razonsocial = (obj_Reader.GetValue(obj_Reader.GetOrdinal("razonsocial")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("nombrefantasia"))) = False Then
                Elemento.str_nombrefantasia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("nombrefantasia")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero"))) = False Then
                Elemento.int_idtercero = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idcobrador"))) = False Then
                Elemento.int_idcobrador = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idcobrador")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idvendedor"))) = False Then
                Elemento.int_idvendedor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idvendedor")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idformapago"))) = False Then
                Elemento.int_idformapago = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idformapago")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("iddenominacion"))) = False Then
                Elemento.int_iddenominacion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("iddenominacion")))
            End If

            If completa Then
                Elemento.idtercero = 0
                Elemento.tercero = New cls_tercero_
                Elemento.tercero.CargarVariables(obj_Reader, False)
            End If
            
            col_Items.Add(Elemento)
        End While
    End Sub

    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        int_idcliente = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idcliente")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("codigo"))) = False Then
            str_codigo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("codigo")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo"))) = False Then
            int_tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("razonsocial"))) = False Then
            str_razonsocial = (obj_Reader.GetValue(obj_Reader.GetOrdinal("razonsocial")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("nombrefantasia"))) = False Then
            str_nombrefantasia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("nombrefantasia")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero"))) = False Then
            int_idtercero = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idcobrador"))) = False Then
            int_idcobrador = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idcobrador")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idvendedor"))) = False Then
            int_idvendedor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idvendedor")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idformapago"))) = False Then
            int_idformapago = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idformapago")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("iddenominacion"))) = False Then
            int_iddenominacion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("iddenominacion")))
        End If
    End Sub

    Public Function Nuevo(Optional ByVal ObtenerID As Boolean = False) As Boolean
        Nuevo = False
        Dim obj_Conexion As New cls_Conexion
        Try

            'Creacion de Tercero----------------------------------------------------
            tercero.tipo = cls_tercero_.enu_tipotercero.Cliente
            If tercero.idtercero = 0 Then
                tercero.Nuevo()
            Else
                tercero.Modificar()
            End If
            idtercero = obj_tercero.idtercero
            '-----------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "cliente__Nuevo"
                .Parameters.Add("@codigo", SqlDbType.NVarChar).Value = str_codigo
                .Parameters.Add("@tipo", SqlDbType.Int).Value = int_tipo
                .Parameters.Add("@razonsocial", SqlDbType.NVarChar).Value = str_razonsocial
                .Parameters.Add("@nombrefantasia", SqlDbType.NVarChar).Value = str_nombrefantasia
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = int_idtercero
                .Parameters.Add("@iddenominacion", SqlDbType.Int).Value = int_iddenominacion

                .Parameters.Add("@idcobrador", SqlDbType.Int).Value = IIf(int_idcobrador = 0, DBNull.Value, int_idcobrador)
                .Parameters.Add("@idvendedor", SqlDbType.Int).Value = IIf(int_idvendedor = 0, DBNull.Value, int_idvendedor)
                .Parameters.Add("@idformapago", SqlDbType.Int).Value = IIf(int_idformapago = 0, DBNull.Value, int_idformapago)

                .ExecuteNonQuery()
            End With
            Nuevo = True
            CargarUltimo()

            'Creacion/modificacion de clientearticuloes-------------------------------------
            If Not IsNothing(clientearticulo_) Then
                If Not IsNothing(clientearticulo_.Items) Then
                    Dim listaprecio As New cls_listaprecio_
                    listaprecio.listaprecioarticulo_ = New cls_listaprecioarticulo_
                    listaprecio.listaprecioarticulo_.Items = New Collections.Generic.List(Of cls_listaprecioarticulo_)
                    listaprecio.idcliente = idcliente
                    listaprecio.tipo = cls_listaprecio_.enu_tipo.Cliente
                    listaprecio.fecha = Now
                    listaprecio.estado = cls_listaprecio_.enu_estado.Activa
                    listaprecio.nombre = "Lista de precios generada automaticamente el :" & Now
                    For Each clientearticulo As cls_clientearticulo_ In clientearticulo_.Items
                        If clientearticulo.idlistaprecio = -1 Then
                            Dim listaprecioarticulo As New cls_listaprecioarticulo_
                            listaprecioarticulo.idarticulo = clientearticulo.idarticulo
                            listaprecioarticulo.valor = clientearticulo.valor
                            listaprecioarticulo.costo = clientearticulo.valor
                            listaprecioarticulo.idmoneda = 1
                            listaprecioarticulo.tipo = cls_alteracion_.enu_tipo.Valor
                            listaprecio.listaprecioarticulo_.Items.Add(listaprecioarticulo)
                        End If
                    Next
                    If listaprecio.listaprecioarticulo_.Items.Count > 0 Then
                        listaprecio.Nuevo(True)
                    End If
                    For Each clientearticulo As cls_clientearticulo_ In clientearticulo_.Items
                        If clientearticulo.idlistaprecio = -1 Then
                            clientearticulo.idlistaprecio = listaprecio.idlistaprecio
                        End If
                        If clientearticulo.idclientearticulo = 0 Then
                            clientearticulo.idcliente = idcliente
                            clientearticulo.Nuevo(True)
                        Else
                            clientearticulo.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion de clientevehiculoes--------------------------------------------------
            Dim existePrimaria As Boolean = False
            If Not IsNothing(clientevehiculo_) Then
                If Not IsNothing(clientevehiculo_.Items) Then
                    For Each clientevehiculo As cls_clientevehiculo_ In clientevehiculo_.Items
                        If clientevehiculo.primario Then
                            existePrimaria = True
                            Exit For
                        End If
                    Next
                    For Each clientevehiculo As cls_clientevehiculo_ In clientevehiculo_.Items
                        If Not existePrimaria Then
                            clientevehiculo.primario = True
                            existePrimaria = True
                        End If
                        clientevehiculo.idcliente = idcliente
                        clientevehiculo.Nuevo(True)
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Crear el registro de cliente_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Function

    Public Sub Modificar()
        Dim obj_Conexion As New cls_Conexion
        Try

            'Modificacion de Tercero------------------------------------------------
            obj_tercero.Modificar()
            '-----------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "cliente__Modificar"
                .Parameters.Add("@idcliente", SqlDbType.Int).Value = int_idcliente
                .Parameters.Add("@codigo", SqlDbType.NVarChar).Value = str_codigo
                .Parameters.Add("@tipo", SqlDbType.Int).Value = int_tipo
                .Parameters.Add("@razonsocial", SqlDbType.NVarChar).Value = str_razonsocial
                .Parameters.Add("@nombrefantasia", SqlDbType.NVarChar).Value = str_nombrefantasia
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = int_idtercero
                .Parameters.Add("@iddenominacion", SqlDbType.Int).Value = int_iddenominacion

                .Parameters.Add("@idcobrador", SqlDbType.Int).Value = IIf(int_idcobrador = 0, DBNull.Value, int_idcobrador)
                .Parameters.Add("@idvendedor", SqlDbType.Int).Value = IIf(int_idvendedor = 0, DBNull.Value, int_idvendedor)
                .Parameters.Add("@idformapago", SqlDbType.Int).Value = IIf(int_idformapago = 0, DBNull.Value, int_idformapago)
                .ExecuteNonQuery()
            End With

            'Creacion/modificacion de clientearticuloes-------------------------------------
            If Not IsNothing(clientearticulo_) Then
                If Not IsNothing(clientearticulo_.Items) Then
                    Dim listaprecio As New cls_listaprecio_
                    listaprecio.listaprecioarticulo_ = New cls_listaprecioarticulo_
                    listaprecio.listaprecioarticulo_.Items = New Collections.Generic.List(Of cls_listaprecioarticulo_)
                    listaprecio.idcliente = idcliente
                    listaprecio.tipo = cls_listaprecio_.enu_tipo.Cliente
                    listaprecio.fecha = Now
                    listaprecio.estado = cls_listaprecio_.enu_estado.Activa
                    listaprecio.nombre = "Lista de precios generada automaticamente el :" & Now
                    For Each clientearticulo As cls_clientearticulo_ In clientearticulo_.Items
                        If clientearticulo.idlistaprecio = -1 Then
                            Dim listaprecioarticulo As New cls_listaprecioarticulo_
                            listaprecioarticulo.idarticulo = clientearticulo.idarticulo
                            listaprecioarticulo.valor = clientearticulo.valor
                            listaprecioarticulo.costo = clientearticulo.valor
                            listaprecioarticulo.idmoneda = 1
                            listaprecioarticulo.tipo = cls_alteracion_.enu_tipo.Valor
                            listaprecio.listaprecioarticulo_.Items.Add(listaprecioarticulo)
                        End If
                    Next
                    If listaprecio.listaprecioarticulo_.Items.Count > 0 Then
                        listaprecio.Nuevo(True)
                    End If
                    For Each clientearticulo As cls_clientearticulo_ In clientearticulo_.Items
                        If clientearticulo.idlistaprecio = -1 Then
                            clientearticulo.idlistaprecio = listaprecio.idlistaprecio
                        End If
                        If clientearticulo.idclientearticulo = 0 Then
                            clientearticulo.idcliente = idcliente
                            clientearticulo.Nuevo(True)
                        Else
                            clientearticulo.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

            'Creacion/modificacion de clientevehiculoes-------------------------------------
            Dim existePrimaria As Boolean = False
            If Not IsNothing(clientevehiculo_) Then
                If Not IsNothing(clientevehiculo_.Items) Then
                    For Each clientevehiculo As cls_clientevehiculo_ In clientevehiculo_.Items
                        If clientevehiculo.primario Then
                            existePrimaria = True
                            Exit For
                        End If
                    Next
                    For Each clientevehiculo As cls_clientevehiculo_ In clientevehiculo_.Items
                        If Not existePrimaria Then
                            clientevehiculo.primario = True
                            existePrimaria = True
                        End If

                        If clientevehiculo.idclientevehiculo = 0 Then
                            clientevehiculo.idcliente = idcliente
                            clientevehiculo.Nuevo(True)
                        Else
                            clientevehiculo.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Modificar el registro de cliente_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Eliminar(ByVal idcliente As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "cliente__Eliminar"
                .Parameters.Add("@idcliente", SqlDbType.Int).Value = idcliente
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Eliminar el registro de cliente_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idcliente As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "cliente__Buscar"
                .Parameters.Add("@idcliente", SqlDbType.Int).Value = idcliente
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Buscar el registro de cliente_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function
    Public Function BuscarXsubCodigo1(ByVal subcodigo1 As String) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            BuscarXsubCodigo1 = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "cliente__BuscarXsubCodigo1"
                .Parameters.Add("@subcodigo1", SqlDbType.NVarChar).Value = subcodigo1
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                BuscarXsubCodigo1 = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al BuscarXsubCodigo1 el registro de cliente_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function
    Public Function BuscarXidtercero(ByVal idtercero As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            BuscarXidtercero = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "cliente__buscarXidtercero"
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = idtercero
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                BuscarXidtercero = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al buscarXidtercero el registro de cliente_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function
    Public Function CargarUltimo() As Boolean
        CargarUltimo = False
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "cliente__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                CargarUltimo = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarUltimo registro de cliente_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function CargarTodos(ByVal FiltrarXUsuario As Boolean, Optional ByVal idregistroestado As Integer = 1) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection

                If FiltrarXUsuario And Not UsuarioLOG.esroot Then
                    .CommandText = "cliente__CargarTodosXidusuario"
                    .Parameters.Add("@idusuario", SqlDbType.Int).Value = UsuarioLOG.idusuario
                Else
                    .CommandText = "cliente__CargarTodos"
                    .Parameters.Add("@idregistroestado", SqlDbType.Int).Value = idregistroestado
                End If
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de cliente_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function
    Public Function CargarTodosLISTA(ByVal FiltrarXUsuario As Boolean, Optional ByVal idregistroestado As Integer = 1) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodosLISTA = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection

                If FiltrarXUsuario And Not UsuarioLOG.esroot Then
                    .CommandText = "cliente__CargarTodosXidusuarioLISTA"
                    .Parameters.Add("@idregistroestado", SqlDbType.Int).Value = idregistroestado
                    .Parameters.Add("@idusuario", SqlDbType.Int).Value = UsuarioLOG.idusuario
                Else
                    .CommandText = "cliente__CargarTodosXidusuarioLISTA"
                    .Parameters.Add("@idregistroestado", SqlDbType.Int).Value = idregistroestado
                    .Parameters.Add("@idusuario", SqlDbType.Int).Value = UsuarioLOG.idusuario
                End If
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader, True)
                CargarTodosLISTA = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de cliente_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_cliente_Clon As New cls_cliente_
        obj_cliente_Clon.int_idcliente = Me.int_idcliente
        obj_cliente_Clon.str_codigo = Me.str_codigo
        obj_cliente_Clon.int_tipo = Me.int_tipo
        obj_cliente_Clon.str_razonsocial = Me.str_razonsocial
        obj_cliente_Clon.str_nombrefantasia = Me.str_nombrefantasia
        obj_cliente_Clon.int_idtercero = Me.int_idtercero
        obj_cliente_Clon.int_iddenominacion = Me.int_iddenominacion

        obj_cliente_Clon.int_idvendedor = Me.int_idvendedor
        obj_cliente_Clon.int_idcobrador = Me.int_idcobrador
        obj_cliente_Clon.int_idformapago = Me.int_idformapago

        obj_cliente_Clon.col_Items = Me.col_Items
        Return obj_cliente_Clon
    End Function


End Class

